#include "common.h"



//实现进程池初始化
//创建子线程，并且用list记录每个子进程的信息
int init_process_pool(son_information *list, int num){
    
    for(int i=0; i<num; i++){
        
        //初始化用于父子进程通信的本地socket
        int local_socket[2];
        memset(local_socket, 0, sizeof(local_socket));
        socketpair(AF_LOCAL, SOCK_STREAM, 0, local_socket);
        
        //创建子进程
        pid_t pid = fork();
        if(pid == 0){
            //子进程
            //父子一人手持一端local_socket即可，另一个就关闭
            close(local_socket[0]);

            //子进程要做的事儿封装成函数
            son_main(local_socket[1]);
        }else{
            //父进程
            //父子进程一人手持一段local_socket即可，另一个就关闭
            close(local_socket[1]);
            //记录子进程的信息
            list[i].pid = pid;
            list[i].status = FREE;
            list[i].local_socket = local_socket[0];
        }

    }
    return 0;
}


//将取出的，建立好的连接交给子进程服务
int to_son(son_information *list, int num, int net_fd){

    for(int i=0; i<5; i++){
        if(list[i].status == FREE){
            //如果该子进程空闲
            //将建立好的链接，通过父子进程的本地socket发送
            local_send(list[i].local_socket, net_fd);
            list[i].status = BUSY;
            break;
        }
    }
    return 0;
}
